/* Universidad del Valle de Guatemala
 * Sara López 12050
 * Matías Vasquez 12186
 * Nombre: Vector.java
 * Sección:21
 */

import java.util.Vector;
import java.util.EmptyStackException;

/**
 * Clase que describe la implementación del ADT pila (Stack) mediante el uso del 
 * objeto Vector y sus respectivos métodos. Tomado del capítulo 10 del libro 
 * Java Structures de Duane A. Bailey.
 */
public class StackVector<E> extends AbstractStack<E> {
    protected Vector<E> data;                        
    
    /**
     * Pre: ninguna.
     * Post: instancia un objeto pila (StackVector), cuyos datos se
     * almacenen en un objeto Vector.
     */
    public StackVector() {
        data = new Vector<E>();
    }
    
    /**
     * post: Ingresa un valor al stack
     */
    public void push(E element) {
        data.add(element);
    }
    
    /*
     * pre: El stack no debe estar vacío
     * post: Devuelve el último elemento agregado al stack y lo retira del mismo.
     */
    public E pop() {
        if (! empty()) {
            return(data.remove(size() - 1));
        } else {
            throw new EmptyStackException(); 
        }
    }
    
    /**
     * pre: El stack no debe estar vacío
     * post:Devuelve el último elemento agregado al stack
     */
    public E peek() {
        if (! empty()) {
            return data.get(size() - 1);
        } else {
            throw new EmptyStackException();
        }
        
    }
        
    /**
     * pre:
     * post: retorna el numero de elementos en el stack
     */
    public int size() {
        return data.size();
    }
}